#include<bits/stdc++.h>
using namespace std;
const int NN=1e5+4;
vector<int>g[NN];
int n,k,ans,use[NN];
bool flag1[NN],flag2[NN],flag3[NN];
bool check(int u,int cnt,int p)
{
	if(flag2[u])
	{
		cnt++;
		p=u;
	}
	if(flag1[u])
	{
		if(cnt>1||!cnt||use[u]&&use[u]!=p)
			return false;
		use[u]=p;
		flag3[p]=true;
	}
	for(int i=0;i<g[u].size();i++)
		if(!check(g[u][i],cnt,p))
			return false;
	return true;
}
void dfs(int u,int cnt)
{
	if(u>n||cnt+n-u+1<k)
		return;
	if(cnt==k)
	{
		for(int i=1;i<=n;i++)
		{
			use[i]=0;
			flag3[i]=false;
		}
		if(!check(1,0,0))
			return;
		for(int i=1;i<=n;i++)
			if(flag2[i]&&!flag3[i])
				return;
		ans++;
		return;
	}
	dfs(u+1,cnt);
	flag2[u]=true;
	dfs(u+1,cnt+1);
	flag2[u]=false;
}
int main()
{
	freopen("lodge.in","r",stdin);
	freopen("lodge.out","w",stdout);
	int m,q;
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
	}
	while(q--)
	{
		int p;
		scanf("%d%d",&k,&p);
		for(int i=1;i<=n;i++)
			flag1[i]=false;
		for(int i=1;i<=p;i++)
		{
			int x;
			scanf("%d",&x);
			flag1[x]=true;
		}
		ans=0;
		dfs(1,0);
		printf("%d\n",ans);
	}
	return 0;
}
